rm(list=ls())
library(tidyverse)
library(data.table)
library(stringi)

# Unzip files
zip_files <- list.files(here::here("data","raw","TSE"), pattern = "prest_", full.names = T)
map(zip_files, unzip,
    exdir = here::here("data","raw","TSE","temp"),
    overwrite = F, 
    junkpaths = T)

# Prepare 2004 data ---------------

#reads TSE data 2004 and keep only mayor information
despesa_cand_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "DespesaCa", full.names = T)
DespesasCandidato_2004 <- fread(file = despesa_cand_2004,
                                sep = ";",colClasses = "character", encoding = "Latin-1")

DespesasCandidato_2004 <- DespesasCandidato_2004 %>% 
  filter(DS_CARGO == "Prefeito")

receita_cand_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "ReceitaCa", full.names = T)
ReceitasCandidato_2004 <- fread(file = receita_cand_2004,
                                sep = ";",colClasses = "character", encoding = "Latin-1")

ReceitasCandidato_2004 <- ReceitasCandidato_2004 %>% 
  filter(DS_CARGO == "Prefeito")

# Need to rename comite files due to enconding problem in file name
despesa_com_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "DespesaCo", full.names = T)

file.rename(from=despesa_com_2004,
            to=paste0(str_sub(despesa_com_2004,1,-6),".csv"))

despesa_com_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "DespesaCo", full.names = T)
DespesasComite_2004 <- fread(file = despesa_com_2004,
                                sep = ";",colClasses = "character", encoding = "Latin-1")

receita_com_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "ReceitaCo", full.names = T)

file.rename(from=receita_com_2004,
            to=paste0(str_sub(receita_com_2004,1,-6),".csv"))

receita_com_2004 <- list.files(here::here("data","raw","TSE","temp"), pattern = "ReceitaCo", full.names = T)

ReceitasComite_2004 <- fread(file = receita_com_2004,
                                sep = ";",colClasses = "character", encoding = "Latin-1")

# Select, format variables and aggregate at city-party level

#candidate
DespesasCandidato_2004 <- DespesasCandidato_2004 %>%
  select(nome_candidato = `NO_CAND"`,
         sigla_uf = SG_UE_SUP,
         nome_municipio = NO_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PART,
         expenditures = VR_DESPESA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()


ReceitasCandidato_2004 <- ReceitasCandidato_2004 %>%
  select(nome_candidato = `NO_CAND"`,
         sigla_uf = SG_UE_SUP,
         nome_municipio = NO_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PART,
         revenues = VR_RECEITA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()

#comite
DespesasComite_2004 <- DespesasComite_2004 %>%
  select(sigla_uf = SG_UE_SUP,
         nome_municipio = NO_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PART,
         expenditures = VR_DESPESA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()

ReceitasComite_2004 <- ReceitasComite_2004 %>%
  select(sigla_uf = SG_UE_SUP,
         nome_municipio = NO_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PART,
         revenues = VR_RECEITA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()

# join

campaign_finance_cand_2004 <- DespesasCandidato_2004 %>% 
  full_join(ReceitasCandidato_2004, by = c("sigla_ue","nome_municipio","sigla_uf","sigla_partido","nome_candidato")) %>% 
  mutate(year = 2004)

campaign_finance_com_2004 <- DespesasComite_2004 %>% 
  full_join(ReceitasComite_2004, by = c("sigla_ue","nome_municipio","sigla_uf","sigla_partido")) %>% 
  mutate(year = 2004)

rm(DespesasCandidato_2004,ReceitasCandidato_2004,DespesasComite_2004,ReceitasComite_2004)
# Prepare 2008 data ---------------

#reads TSE data 2008

DespesasCandidato_2008 <- fread(file = here::here("data","raw","TSE","temp","despesas_candidatos_2008_brasil.csv"),
                                sep = ";",colClasses = "character", encoding = "Latin-1")

DespesasCandidato_2008 <- DespesasCandidato_2008 %>% 
  filter(DS_CARGO == "Prefeito")

ReceitasCandidato_2008 <- fread(file = here::here("data","raw","TSE","temp","receitas_candidatos_2008_brasil.csv"),
                                sep = ";",colClasses = "character", encoding = "Latin-1")

ReceitasCandidato_2008 <- ReceitasCandidato_2008 %>% 
  filter(DS_CARGO == "Prefeito")

DespesasComite_2008 <- fread(file = here::here("data","raw","TSE","temp", "despesas_comites_2008_brasil.csv"),
                             sep = ";",colClasses = "character", encoding = "Latin-1")

ReceitasComite_2008 <- fread(file = here::here("data","raw","TSE","temp","receitas_comites_2008_brasil.csv"),
                             sep = ";",colClasses = "character", encoding = "Latin-1")


# Select, format variables and aggregate at city-party level

#candidato
DespesasCandidato_2008 <- DespesasCandidato_2008 %>%
  select(nome_candidato = NM_CANDIDATO,
         sq_candidato = SEQUENCIAL_CANDIDATO,
         sigla_uf = SG_UE_SUPERIOR,
         nome_municipio = NM_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PARTIDO,
         expenditures = VR_DESPESA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sq_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()


ReceitasCandidato_2008 <- ReceitasCandidato_2008 %>%
  select(nome_candidato = NM_CANDIDATO,
         sq_candidato = SEQUENCIAL_CANDIDATO,
         sigla_uf = SG_UE_SUPERIOR,
         nome_municipio = NM_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PARTIDO,
         revenues = VR_RECEITA) %>%
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sq_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()



#comite
DespesasComite_2008 <- DespesasComite_2008 %>%
  select(sigla_uf = SG_UE_SUPERIOR,
         nome_municipio = NM_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PARTIDO,
         expenditures = VR_DESPESA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()


ReceitasComite_2008 <- ReceitasComite_2008 %>%
  select(sigla_uf = SG_UE_SUPERIOR,
         nome_municipio = NM_UE,
         sigla_ue = SG_UE,
         sigla_partido = SG_PARTIDO,
         revenues = VR_RECEITA) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()

# join
campaign_finance_cand_2008 <- DespesasCandidato_2008 %>% 
  full_join(ReceitasCandidato_2008, by = c("sigla_ue","nome_municipio","sigla_uf","sq_candidato","nome_candidato","sigla_partido")) %>%
  mutate(year = 2008)

campaign_finance_com_2008 <- DespesasComite_2008 %>% 
  full_join(ReceitasComite_2008, by = c("sigla_ue","nome_municipio","sigla_uf","sigla_partido")) %>% 
  mutate(year = 2008)

rm(DespesasCandidato_2008,ReceitasCandidato_2008,DespesasComite_2008,ReceitasComite_2008)


#reads TSE data 2012
DespesasCandidato_2012 <- fread(file = here::here("data","raw","TSE","temp","despesas_candidatos_2012_brasil.txt"),
                                colClasses = "character", encoding = "Latin-1")

DespesasCandidato_2012 <- DespesasCandidato_2012 %>% 
  filter(Cargo == "Prefeito")

ReceitasCandidato_2012 <- fread(file = here::here("data","raw","TSE","temp","receitas_candidatos_2012_brasil.txt"),
                                colClasses = "character", encoding = "Latin-1")

ReceitasCandidato_2012 <- ReceitasCandidato_2012 %>% 
  filter(Cargo == "Prefeito")

DespesasComite_2012 <- fread(file = here::here("data","raw","TSE","temp","despesas_comites_2012_brasil.txt"),
                             colClasses = "character", encoding = "Latin-1")

ReceitasComite_2012 <- fread(file = here::here("data","raw","TSE","temp","receitas_comites_2012_brasil.txt"),
                             colClasses = "character", encoding = "Latin-1")


#candidato
DespesasCandidato_2012 <- DespesasCandidato_2012 %>% 
  select(nome_candidato = `Nome candidato`,
         sq_candidato = `Sequencial Candidato`,
         sigla_uf = UF,
         nome_municipio = Município,
         sigla_ue = `Número UE`,
         sigla_partido = `Sigla  Partido`,
         expenditures = `Valor despesa`) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sq_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()


ReceitasCandidato_2012 <- ReceitasCandidato_2012 %>% 
  select(nome_candidato = `Nome candidato`,
         sq_candidato = `Sequencial Candidato`,
         sigla_uf = UF,
         nome_municipio = Municipio,
         sigla_ue = `Numero UE`,
         sigla_partido = `Sigla  Partido`,
         revenues = `Valor receita`) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(nome_candidato,sq_candidato,sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_cand_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()



#comite
DespesasComite_2012 <- DespesasComite_2012 %>% 
  select(sigla_uf = UF,
         nome_municipio = Município,
         sigla_ue = `Número UE`,
         sigla_partido = `Sigla  Partido`,
         expenditures = `Valor despesa`) %>% 
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(expenditures = str_replace_all(expenditures,pattern = ",",replacement = ".")) %>% 
  mutate(expenditures = as.numeric(expenditures)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_expenditures = sum(expenditures, na.rm = T)) %>% 
  ungroup()


ReceitasComite_2012 <- ReceitasComite_2012 %>%
  select(sigla_uf = UF,
         nome_municipio = Município,
         sigla_ue = `Número UE`,
         sigla_partido = `Sigla  Partido`,
         revenues = `Valor receita`) %>%  
  mutate_all(list(~stri_trans_general(str = ., id = "Latin-ASCII"))) %>% 
  mutate_all(list(~str_replace_all(.,pattern = "\"", replacement = ""))) %>% 
  mutate(revenues = str_replace_all(revenues,pattern = ",",replacement = ".")) %>% 
  mutate(revenues = as.numeric(revenues)) %>% 
  mutate_if(is.character,toupper) %>% 
  group_by(sigla_uf,nome_municipio,sigla_ue,sigla_partido) %>% 
  summarise(tot_com_revenues = sum(revenues, na.rm = T)) %>% 
  ungroup()

# join
campaign_finance_cand_2012 <- DespesasCandidato_2012 %>% 
  full_join(ReceitasCandidato_2012, by = c("sigla_ue","nome_municipio","sigla_uf","sq_candidato","nome_candidato","sigla_partido")) %>% 
  mutate(year = 2012)

campaign_finance_com_2012 <- DespesasComite_2012 %>% 
  full_join(ReceitasComite_2012, by = c("sigla_ue","nome_municipio","sigla_uf","sigla_partido")) %>% 
  mutate(year = 2012)

rm(DespesasCandidato_2012,ReceitasCandidato_2012,DespesasComite_2012,ReceitasComite_2012)

# Bind all years and save

campaign_finance_cand_mayors <- bind_rows(campaign_finance_cand_2004,campaign_finance_cand_2008,campaign_finance_cand_2012) %>% 
    mutate(sigla_partido = str_replace_all(sigla_partido," ",""),
           sigla_partido = str_to_upper(sigla_partido))

campaign_finance_com_mayors <- bind_rows(campaign_finance_com_2004,campaign_finance_com_2008,campaign_finance_com_2012) %>% 
    mutate(sigla_partido = str_replace_all(sigla_partido," ",""),
           sigla_partido = str_to_upper(sigla_partido))

write_rds(campaign_finance_cand_mayors, here::here("data","processed","elections","campaign_finance_cand_mayors.rds"))
write_rds(campaign_finance_com_mayors, here::here("data","processed","elections","campaign_finance_com_mayors.rds"))


# Delete temp folder with unzipped files
unlink(here::here("data","raw","TSE","temp"), recursive = T)
